[IA64] kexec: add __va_efi
authorIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 22 Jul 2008 03:15:02 +0000 (12:15 +0900)
committerIsaku Yamahata <yamahata@valinux.co.jp>
Tue, 22 Jul 2008 03:15:02 +0000 (12:15 +0900)
commit8c2d0ddcc54b1523938bc893d726a036497cc0cf
tree7f01985d845e3a575f93d1d88833e8a671ab2f32
parente91f96bf9bcce78cd16d0e88087c027d8b9bc191
[IA64] kexec: add __va_efi

sal_desc_entry_point() converts physical addresses into virtual
addresses using __va() and these virtual addresses are used
to register the SAL and PAL handlers - which exist in firmware
memory.

As the mapping of firmware memory is being moved from
a PAGE_OFFSET of (0xf << 60) to a PAGE_OFFSET of (0xe << 60),
__va() does not provide the correct virtual address.

By adding __va_efi(), which uses EFI_PAGE_OFFSET=(0xe << 60),
and using this in sal_desc_entry_point(), the correct address is
used.

On an HP rx2600 this eliminates the problem where the SAL rendezvous address
can't be registered and subsequently the boot fails. I suspect it
solves similar problems that have been seen on other HP machines too.

Actually, its rather amazing that the HP rx2620 and Tiger2 that
I have been using work without this fix.

Signed-off-by: Simon Horman <horms@verge.net.au>
xen/arch/ia64/linux-xen/sal.c
xen/include/asm-ia64/xenpage.h